/**
 * 链式栈储存, 是一种只能操作链表头部的特殊单链表
 */

#ifndef _LINKEDSTACK_
#define _LINKEDSTACK_

#define Status int
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0

typedef int ElemType;

// stack是栈顶指针
typedef struct Node {
    ElemType data;
    struct Node *next;
} Node, *Stack;

// 初始化
Status InitStack(Stack *stack);

// 销毁
Status DestroyStack(Stack *stack);

// 判断是否为空
int StackEmpty(Stack stack);

// 求栈的长度
int StackLength(Stack stack);

// 取栈顶元素
Status GetTop(Stack stack, ElemType *e);

// 置空栈
Status ClearStack(Stack *stack);

// 压栈
Status Push(Stack *stack, ElemType e);

// 弹栈
Status Pop(Stack *stack, ElemType *e);

#endif